home *** CD-ROM | disk | FTP | other *** search
/ Software Vault: The Games Collection 1 / software vault.zip / software vault / CDR10 / XLIB06.ZIP / XLIBTL02 / LBM2CBM.C next >
C/C++ Source or Header  |  1993-03-27  |  4KB  |  158 lines

  1. #include <stdio.h>
  2. #include <alloc.h>
  3. #include <mem.h>
  4. #include <stdlib.h>
  5. #include <string.h>
  6. #include <dir.h>
  7. #include <dos.h>
  8. #include "xlib_all.h"
  9. #define TITLE "LBM2CBM - Linear to Compiled bitmap conversion utility    T. Gouthas 20/11/92\n"
  10. #define SRC_EXT ".LBM"
  11. #define DEST_EXT ".CBM"
  12.  
  13. int convert(char *filenamein, char *filenameout);
  14. void syntax();
  15.  
  16. typedef struct _lbm_struc {
  17.   unsigned char width;
  18.   unsigned char height;
  19.   unsigned char data[];
  20. } far *LBM_PTR;
  21.  
  22. unsigned ScrnLogicalByteWidth;
  23.  
  24. #define BUFF_LEN 100
  25. size_t farfread(void far *destptr,size_t size, size_t n, FILE *fp){
  26.    unsigned len;
  27.    unsigned char buff[BUFF_LEN];
  28.    len=size*n;
  29.    while(len >=BUFF_LEN){
  30.      fread(buff,BUFF_LEN,1,fp);
  31.      movedata((unsigned)_DS,(unsigned)buff,FP_SEG(destptr),FP_OFF(destptr),BUFF_LEN);
  32.      len-=BUFF_LEN;
  33.      (char far *)destptr+=BUFF_LEN;
  34.    }
  35.    if (len>0){
  36.      fread(buff,len,1,fp);
  37.      movedata((unsigned)_DS,(unsigned)buff,FP_SEG(destptr),FP_OFF(destptr),len);
  38.    }
  39. };
  40.  
  41. size_t farfwrite(void far *srcptr,size_t size, size_t n, FILE *fp){
  42.    unsigned len;
  43.    unsigned char buff[BUFF_LEN];
  44.    len=size*n;
  45.    while(len >=BUFF_LEN){
  46.      movedata(FP_SEG(srcptr),FP_OFF(srcptr),(unsigned)_DS,(unsigned)buff,BUFF_LEN);
  47.      fwrite(buff,BUFF_LEN,1,fp);
  48.      len-=BUFF_LEN;
  49.      (char far *)srcptr+=BUFF_LEN;
  50.    }
  51.    if (len>0){
  52.      movedata(FP_SEG(srcptr),FP_OFF(srcptr),(unsigned)_DS,(unsigned)buff,len);
  53.      fwrite(buff,len,1,fp);
  54.    }
  55. };
  56.  
  57.  
  58. int convert(char *filenamein, char *filenameout){
  59.   static char far *ibuff=NULL, far *obuff=NULL;
  60.   static unsigned isize=0, osize=0;
  61.   unsigned width,height;
  62.   FILE *fi, *fo;
  63.   char far * farchptr;
  64.   unsigned infilesize,outfilesize;
  65.   fi=fopen(filenamein,"rb+");
  66.   if(!fi) return 0;
  67.   fo=fopen(filenameout,"wb+");
  68.   if (!fo) {
  69.     fclose(fi);
  70.     return 0;
  71.   }
  72.   fseek(fi,0,SEEK_END);
  73.   infilesize = (unsigned) ftell(fi);
  74.   fseek(fi,0,SEEK_SET);
  75.   if (ibuff==NULL){
  76.     ibuff=farmalloc(infilesize);
  77.     if (ibuff==NULL) goto error;
  78.     isize=infilesize;
  79.   } else {
  80.     farchptr=farrealloc(ibuff,infilesize);
  81.     if (farchptr==NULL) goto error;
  82.     ibuff=farchptr;
  83.     isize=infilesize;
  84.   }
  85.   farfread(ibuff,infilesize,1,fi);
  86.   if ferror(fi) goto error;
  87.   outfilesize=x_sizeof_cbitmap(ScrnLogicalByteWidth,ibuff);
  88.   if (obuff==NULL){
  89.     obuff=farmalloc(outfilesize);
  90.     if (obuff==NULL) goto error;
  91.     osize=outfilesize;
  92.   } else {
  93.     farchptr=farrealloc(obuff,outfilesize);
  94.     if (farchptr==NULL) goto error;
  95.     obuff=farchptr;
  96.     osize=outfilesize;
  97.   }
  98.   if(osize!=x_compile_bitmap(ScrnLogicalByteWidth,ibuff,obuff)){
  99.     printf("Compilation Size Mismatch: BUG !!\n");
  100.   }
  101.   farfwrite(obuff,osize,1,fo);
  102.   if ferror(fo) goto error;
  103.   fclose(fi);
  104.   fclose(fo);
  105.   return 1;
  106. error:
  107.   fclose(fi);
  108.   fclose(fo);
  109.   return 0;
  110. }
  111.  
  112. void syntax(){
  113.   printf("\n LBM2CBM <Logical scrn width> <filespec> [ <filespec> ..] \n\n");
  114.   exit(0);
  115. }
  116.  
  117. void main(int argc, char *argv[]){
  118.    int  i;
  119.    char *dotptr;
  120.    char *tempptr;
  121.    char drive[MAXDRIVE];
  122.    char dir[MAXDIR];
  123.    char name[MAXFILE];
  124.    char ext[MAXEXT];
  125.    char filenameraw[100];
  126.    char filenamewild[100];
  127.    char filenamein[100];
  128.    char filenameout[100];
  129.    struct ffblk ffb;
  130.    printf(TITLE);
  131.    if (argc<3) syntax();
  132.    sscanf(argv[1],"%ud",&ScrnLogicalByteWidth);
  133.    for (i=2;i<argc;i++){
  134.      strupr(argv[i]);
  135.      strcpy(filenamewild,argv[i]);
  136.      printf("\nConverting files matching \"%s\".\n",argv[i]);
  137.  
  138.      fnsplit(filenamewild,drive,dir,NULL,ext);
  139.      if (*ext=='\0') strcat(filenamewild,SRC_EXT);
  140.  
  141.      if(findfirst(filenamewild,&ffb,0)){
  142.        printf("No files found.\n");
  143.        exit(1);
  144.      }
  145.      do {
  146.        fnsplit(ffb.ff_name,NULL,NULL,name,ext);
  147.        if (strcmp(ext,SRC_EXT)){
  148.      printf("Skipping  : %12s -> incorrect type.\n",ffb.ff_name);
  149.        } else {
  150.      fnmerge(filenamein,drive,dir,name,ext);
  151.      fnmerge(filenameout,drive,dir,name,DEST_EXT);
  152.      printf("Converting: %12s -> %12s  ",filenamein,filenameout);
  153.      if (convert(filenamein,filenameout)) printf("OK\n");
  154.      else printf("FAILED\n");
  155.        }
  156.      } while(!findnext(&ffb));
  157.    }
  158. }